package com.example.teemor.es_demo.repository.jpa;

import com.example.teemor.es_demo.entity.ProductMySQL;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;

public interface ProductMySQLRepository extends JpaRepository<ProductMySQL, Long> {
    
    /**
     * 根据分类查找商品
     */
    List<ProductMySQL> findByCategory(String category);
    
    /**
     * 根据品牌查找商品
     */
    List<ProductMySQL> findByBrand(String brand);
    
    /**
     * 根据价格范围查找商品
     */
    List<ProductMySQL> findByPriceBetween(Double minPrice, Double maxPrice);
    
    /**
     * 查找库存大于指定数量的商品
     */
    List<ProductMySQL> findByStockGreaterThan(Integer stock);
    
    /**
     * 获取所有不同的分类
     */
    @Query("SELECT DISTINCT p.category FROM ProductMySQL p WHERE p.category IS NOT NULL")
    List<String> findDistinctCategories();
    
    /**
     * 获取所有不同的品牌
     */
    @Query("SELECT DISTINCT p.brand FROM ProductMySQL p WHERE p.brand IS NOT NULL")
    List<String> findDistinctBrands();
    
    /**
     * 按分类统计商品数量
     */
    @Query("SELECT p.category, COUNT(p) FROM ProductMySQL p GROUP BY p.category")
    List<Object[]> countByCategory();
    
    /**
     * 按品牌统计商品数量
     */
    @Query("SELECT p.brand, COUNT(p) FROM ProductMySQL p GROUP BY p.brand")
    List<Object[]> countByBrand();
    
    /**
     * 根据关键词搜索商品（标题、描述、品牌、分类）
     */
    @Query("SELECT p FROM ProductMySQL p WHERE " +
           "p.title LIKE %:keyword% OR " +
           "p.description LIKE %:keyword% OR " +
           "p.brand LIKE %:keyword% OR " +
           "p.category LIKE %:keyword%")
    List<ProductMySQL> searchByKeyword(@Param("keyword") String keyword);
    
    /**
     * 查找热门商品（按某种规则排序，这里简单按ID降序）
     */
    @Query("SELECT p FROM ProductMySQL p ORDER BY p.id DESC")
    List<ProductMySQL> findPopularProducts();
    
    /**
     * 根据分类和价格范围查找商品
     */
    List<ProductMySQL> findByCategoryAndPriceBetween(String category, Double minPrice, Double maxPrice);
    
    /**
     * 根据品牌和价格范围查找商品
     */
    List<ProductMySQL> findByBrandAndPriceBetween(String brand, Double minPrice, Double maxPrice);
}